Джессика Ливингстон - Как все начиналось. Apple, PayPal, Yahoo! и еще 20 историй известных стартапов глазами их основателей
А затем появилась компания Data General со своим мини‑компьютером Nova, в котором вместо использования 50 команд для выполнения различных математических операций применялась всего одна из 16 битов: шесть единиц и шесть нулей. Пара этих единиц и нулей указывала, данные каких четырех регистров будут использоваться. Вторая пара битов относилась к применению других четырех регистров. Следующая пара указывала, требуется ли смещение или сдвиг результата (что эквивалентно умножению или делению на два в двоичной системе). Также существовали биты для определения необходимости переноса. То есть все 16 битов несли какую‑то смысловую нагрузку. Я все это внимательно изучил, самостоятельно воссоздавая на бумаге принципы работы компьютера Nova. При этом я выяснил, что два бита кодируют один из четырех регистров, поэтому отправил их на вход микросхемы 4‑входового мультиплексора. Мне не пришлось придумывать последовательность выполнения тех или иных операций. Я просто реализовал все с точки зрения логики. Три бита подавались на вход логической микросхемы, чтобы определить тип битовой операции (И, ИЛИ, исключающее ИЛИ), и еще один бит – в сумматор в качестве флага переноса. В результате этого усовершенствования в Nova осталось в два раза меньше микросхем, чем в других мини‑компьютерах, созданных компаниями Varian, Digital Equipment Corp. и Hewlett‑Packard (я сконструировал на бумаге их все). Я понял, что это только ему на пользу, поскольку лишь в этом случае возникает настоящая архитектура ПК.
Всю жизнь я старался оптимизировать устройства. Вы не просто экономите детали, но уменьшаете сложность и повышаете надежность устройства. Кроме того, более простой проект легче понять, что позволяет избежать ошибок и недостатков.
Ливингстон. Вы воссоздали схему работы всех компьютеров того времени еще когда учились в школе? У себя дома, просто ради развлечения?
Возняк. Да, поскольку физически я не мог собрать настоящий ПК. И не только поэтому. Я снова и снова менял проект каждого компьютера в связи с появлением новых микросхем, я «брал» их и вносил в схему коррективы, так как у меня возникали идеи, как сэкономить пару‑тройку микросхем.
Я всем этим занимался из‑за отсутствия денег на приобретение настоящих деталей. Я не мог собрать ни одного компьютера. В те времена микросхемы стоили столько… Короче говоря, цена компьютера примерно равнялась стоимости дома. Так что мне ничего не оставалось, как конструировать их на бумаге, пытаясь сделать все лучше и лучше. Я соревновался сам с собой. Я просто объясняю, откуда у меня навыки в создании устройств.
Я знал, что используемые при этом методы никогда не будут применены на практике. Их не станут изучать в школьной программе. Я многое придумывал сам. Я – настоящий самоучка. В нашей школе вообще не было компьютеров. Но я их проектировал. Как‑то мне попались журналы, в которых я нашел руководство по эксплуатации компьютеров, а отец дал мне несколько пособий по микросхемам. Оставалось лишь изучить их.
В чем заключался мой талант? Если я знаю свою конечную цель (а в то время ею был компьютер), то найду способ, как эффективно объединить микросхемы, чтобы ее добиться. И у меня получится, даже если раньше я никогда не проектировал ничего подобного. Я не знал, как создать гибкий диск, интерфейсы принтера и модема, но когда мне это понадобилось, я разработал собственные решения, не имея понятия, как это делали другие. Этот врожденный талант помог мне стать хорошим специалистом. Все мои лучшие достижения в Apple стали результатом того, что: во‑первых, у меня не было денег, а во‑вторых, я никогда не делал этого раньше. Каждое маленькое устройство, которое мы выпускали, было настоящим открытием.
Ливингстон. Можно ли считать, что ваш совет тем, кто хочет стать мастером своего дела, звучит так: делайте что‑то, чего раньше никогда не делали, и попытайтесь сделать это дешево.
Возняк. Да! Но должны быть соответствующие способности. У нас работал парень, который спроектировал Macintosh, так он никогда не посещал колледж, но изучил интегральные микросхемы и стал мастером‑самоучкой.
Ливингстон. Вы поступили в колледж, а затем его бросили, верно?
Возняк. Не совсем. Но в колледже я не изучал проектирование компьютеров. Например, я не посетил ни одного занятия по программированию, поэтому когда я собрал компьютер, мне пришлось написать собственную версию языка программирования – Basic. У меня просто не было другого выхода, ведь иначе компьютер бы не работал. Кроме того, я знал, как использовать низкоуровневое программирование для создания приложений широкого применения. Мой друг учился в Массачусетском технологическом институте и отксерил мне несколько страничек из книг по созданию компиляторов. Так что у меня было некоторое представление о том, какие методы применяются при синтаксическом анализе языка программирования.
Поэтому, собирая Apple I, я просто воспользовался уже имеющимся у меня терминалом, состоящим из телевизора и клавиатуры. Это был простейший способ, и модель Apple I нельзя назвать эффективной (ею стал Apple II). А затем я подумал: «У всех выпускающихся компьютеров много переключателей и лампочек, и выглядят они, как приборная панель в самолете. И уж очень напоминают тот, который я собрал пять лет тому назад». Это был компьютер Cream Soda Computer («Компьютер крем‑сода»). Он работал слишком медленно, да и собран был кое‑как. Увы, он не делал того, что мне было нужно. Я хотел писать программы на Basic, создавать игры и написать такую программу, которая бы позволила установить мои компьютеры в Hewlett‑Packard. (На работе я и еще 40 инженеров компании пользовались большим суперкомпьютером, и приходилось резервировать время, чтобы к нему подступиться.)
Я хотел создать производительный компьютер, а это означало, что в нем должны присутствовать микропроцессор и динамическая оперативная память (для экономии денег и деталей). Терминал у меня уже был. Дело оставалось за языком программирования. Да, у меня был компьютер с 4 Кбайтами ОЗУ. Он мог выполнять программы, но у меня не было языка программирования для микропроцессора. Поэтому, с одной стороны, я был немного разочарован, а с другой, пребывал в радостном возбуждении, поскольку собирался стать его творцом. Я надеялся, что это принесет мне определенную известность. Однако прославиться я мог лишь при условии, что сделаю все на высочайшем уровне.
Вот так получилось, что я был вынужден написать язык программирования для микропроцессора, но не забывайте, что раньше я этого не делал, не слушал лекций и не ходил на занятия по данному предмету. Поэтому я просто открыл руководство для сотрудников Hewlett‑Packard и прочел в нем описание языка Basic. Там я вычитал все команды Basic и приступил к созданию синтаксической таблицы, определяющей правила этого языка: какие команды в нем существуют, какие их последовательности допускаются, как заносить имена в переменные, как работать с числами, какого размера и формата они могут быть. Затем возникла идея (не знаю, откуда она ко мне пришла), сводившаяся к следующему: когда пользователь введет оператор, я буду просто сканировать его символ за символом, слева направо, и проверять на соответствие синтаксической таблице. Последнюю я занес в память. Я решил так: «Буду просматривать память, и, если оператор пользователя совпадет с записью в синтаксической таблице, то при переводе строки я буду знать все введенные символы». В этом и заключалась идея. Я не был знаком с правилами программирования микропроцессоров. И по сегодняшний день не знаю, как пишутся компиляторы.
Кроме того, мне было известно о существовании цифр и переменных, а также арифметических действиях. Цифры представляли собой субъекты, а арифметические действия – предикаты. Даже в операторе PRINT слово «print» становилось предикатом. Таким образом, я получил списки предикатов и теперь у меня были стек субъектов и стек предикатов. Оставалось только определить правила их взаимодействия и последовательность записи, например, с помощью обратной нотации.
Я был хорошо знаком с правилами обратной нотации из книг, которые прочел в колледже (а также из распечаток, сделанных для меня другом). Кроме того, в калькуляторах Hewlett‑Packard тоже применялась обратная польская нотация. Согласно этой форме записи уравнение «5 + 4» превращается в «5 ENTER 4 +», т. е. оператор записывается после операндов. Но как преобразовать эти данные? Для меня это оказалось посильной задачей, поскольку в данной области я имел некоторые знания.
Итак, я создал свою версию языка Basic, и она работала. Это был самый трудный проект в моей жизни. Как правило, вы просто устанавливаете программу в компьютер. Это единственный способ заставить его функционировать. Ввод программы осуществляется с помощью клавиатуры или карт. Но мне пришлось вручную записать свою программу на левой половине страницы, а затем преобразовать команды на понятный компьютеру язык – в машинный код, состоящий из последовательности нулей и единиц. Если в программе требовалось выполнить смещение на 19 байт, то приходилось записывать число 19 в двоичном коде (в виде нулей и единиц). Я делал это вручную, поскольку у меня не было программы‑компилятора, которая выполнила бы данную задачу за меня. То есть я программировал на самом низком из существующих уровней. Что касается самого компьютера, то я не только начертил его на бумаге (я любил чертить все свои устройства на чертежной доске), но и соединил все его детали, определил, когда их можно реализовать в виде плат, а также смонтировал их на платах.